﻿////////////////////////////////////////////////////
//
//  ゲーム用に作成したコントローラークラス
//  作成日：2012/11/19
//  作成者：岩井賢司
//  履歴：2012/11/19　初版作成（岩井）
//        2012/11/20　ソースコード修正,アナログスティックの数値取得メソッド追加,トリガーボタンの数値取得メソッド追加（岩井）
//        2012/11/26　region追加
//
////////////////////////////////////////////////////

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Input;

namespace Particle_Tackle
{
    /// <summary>
    /// ゲームパッドの拡張クラス
    /// </summary>
    static class GameController
    {
        #region Fields::変数宣言
        /// <summary>
        /// 現在のパッドの状態
        /// </summary>
        private static GamePadState CurrentPadState;

        /// <summary>
        /// 前回のパッドの状態
        /// </summary>
        private static GamePadState LastPadState;

        #endregion

        #region Init::初期化
        /// <summary>
        /// ゲームパッド初期化
        /// </summary>
        public static void Init()
        {
            CurrentPadState = GamePad.GetState(PlayerIndex.One);
            LastPadState = GamePad.GetState(PlayerIndex.One);
        }
        #endregion

        #region Update::更新
        /// <summary>
        /// ゲームパッド更新処理
        /// </summary>
        public static void Update()
        {
            LastPadState = CurrentPadState;
            CurrentPadState = GamePad.GetState(PlayerIndex.One);
        }
        #endregion

        #region getPress::ゲームパッドの押下状態を取得する
        /// <summary>
        /// ゲームパッドの押下状態を取得するメソッド
        /// </summary>
        /// <param name="button"></param>
        /// <returns></returns>
        public static bool getPress(Buttons button)
        {
            return CurrentPadState.IsButtonDown(button);
        }
        #endregion

        #region getTrigger::ゲームパッドの押された瞬間の状態を取得する
        /// <summary>
        /// ゲームパッドの押された瞬間の状態を取得するメソッド
        /// </summary>
        /// <param name="button"></param>
        /// <returns></returns>
        public static bool getTrigger(Buttons button)
        {
            if (LastPadState.IsButtonUp(button))
                return CurrentPadState.IsButtonDown(button);
            return false;
        }
        #endregion

        #region getRelease::ゲームパッドの離された瞬間の状態を取得する
        /// <summary>
        /// ゲームパッドの離された瞬間の状態を取得するメソッド
        /// </summary>
        /// <param name="button"></param>
        /// <returns></returns>
        public static bool getRelease(Buttons button)
        {
            if (LastPadState.IsButtonDown(button))
                return CurrentPadState.IsButtonUp(button);
            return false;
        }
        #endregion

        #region getLeftStickParamX::左スティックのX座標を取得
        /// <summary>
        /// 左スティックのX座標を取得
        /// </summary>
        /// <returns></returns>
        public static float getLeftStickParamX()
        {
            return CurrentPadState.ThumbSticks.Left.X;
        }
        #endregion

        #region getLeftStickParamY::左スティックのY座標を取得
        /// <summary>
        /// 左スティックのY座標を取得
        /// </summary>
        /// <returns></returns>
        public static float getLeftStickParamY()
        {
            return CurrentPadState.ThumbSticks.Left.Y;
        }
        #endregion

        #region getRightStickParamX::右スティックのX座標を取得
        /// <summary>
        /// 右スティックのX座標を取得
        /// </summary>
        /// <returns></returns>
        public static float getRightStickParamX()
        {
            return CurrentPadState.ThumbSticks.Right.X;
        }
        #endregion

        #region getRtightStickParamY::右スティックのY座標を取得
        /// <summary>
        /// 右スティックのY座標を取得
        /// </summary>
        /// <returns></returns>
        public static float getRightStickParamY()
        {
            return CurrentPadState.ThumbSticks.Right.Y;
        }
        #endregion

        #region getLeftTriggerButton::左トリガーの押下量を取得
        /// <summary>
        /// 左トリガーの押下量を取得
        /// </summary>
        /// <returns></returns>
        public static float getLeftTriggerButton()
        {
            return CurrentPadState.Triggers.Left;
        }
        #endregion

        #region getRightTriggerButton::右トリガーの押下量を取得
        /// <summary>
        /// 右トリガーの押下量を取得
        /// </summary>
        /// <returns></returns>
        public static float getRightTriggerButton()
        {
            return CurrentPadState.Triggers.Right;
        }
        #endregion
    }
}
